/*题目描述

设计并实现一个动态整型数组类Vect，要求：

（1）实现构造函数重载，可以根据指定的元素个数动态创建初始值为0的整型数组，或根据指定的内置整型数组动态创建整型数组。

（2）设计拷贝构造函数和析构函数，注意使用深拷贝。

（3）设计存取指定位置的数组元素的公有成员函数，并进行下标越界，若越界则输出“out of boundary”。

（4）设计获取数组元素个数的公有成员函数。

（5）设计用于输出数组元素的公有成员函数，元素之间以空格分隔，最后以换行符结束。



在main函数中按以下顺序操作：

（1）根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1，根据输入的整型数构造数组对象v2。

（2）调用Vect的成员函数依次输出v1和v2的所有元素。

（3）输入指定的下标及对应的整型数，设置数组对象v1的指定元素。

（4）根据数组对象v1拷贝构造数组对象v3。

（5）调用Vect的成员函数依次输出v1和v3的所有元素。
输入

用于构建数组对象v2的元素个数

用于设置数组对象v1的指定下标及元素值
输出

数组对象v1和v2的所有元素

数组对象v1和v3的所有元素 */

#include <iostream>

using namespace std;

class Vect 
{
private:
	int m_size;
	int* val;
	static int vect[];
public:
	Vect(int size);
	Vect(const Vect& p);
	~Vect();
	static void setVect();
	void setVal();
	void insert(int p, int v);
	int getSize();
	void display();
};
int Vect::vect[] = { 1,2,3,4,5 };

int main()
{
	int n, pv, vl;
	Vect v(0), v1(0);
	v.setVect();
	v1.setVal();
	cin >> n;
	cin >> pv >> vl;
	Vect v2(n);
	v1.display(); v2.display();
	v1.insert(pv, vl);
	v1.display(); 
	Vect v3(v1); 
	v3.display();
}

Vect::Vect(int size = 0) : m_size(size)
{
	if (size == 0)
	{
		val = NULL;
	}
	else
	{
		val = new int[size];
		for (int i=0; i<size; i++)
		{
			val[i] = 0;
		}
	}

}

Vect::Vect(const Vect& p)
{
	if (!p.val)
	{
		val = NULL;
		m_size = p.m_size;
		return;
	}
	else
	{
		m_size = p.m_size;
		val = new int[m_size];
		int* to = val, * from = p.val, i = m_size;
		while (i--)
			*(to++) = *(from++);
	}
}

Vect::~Vect()
{
	if (val) 
	{
		delete[] val;
	}
}

void Vect::setVect()
{
	for (int i = 0; i < 5; i++)
	{
		vect[i] = i + 1;
	}
}

void Vect::setVal()
{
	val = new int[5];
	for (int i = 0; i < 5; i++)
	{
		val[i] = vect[i];
	}
	m_size = 5;
}

void Vect::insert(int p, int v)
{
	if (p < m_size)
	{
		val[p] = v;
	}
	else
	{
		cout << "out of boundary" << endl;
	}
}

int Vect::getSize()
{
	return m_size;
}

void Vect::display()
{
	for (int i = 0; i < m_size; i++)
	{
		printf("%d",val[i]);
		if (i < m_size - 1)
			printf(" ");
	}
	cout << endl;
}